var express = require('express');
var router = express.Router();
var courseDao = require('../dao/course');
var mechanismDao = require('../dao/mechanism');
var uploadPicHelper = require('../util/uploadPicHelper');
var AdminToken = require('../db/user_tokens');
var courseRoutes = module.exports;

/**
 * 获取主课程信息
 * @param  id   (可不传)
 * @param  token
 *         url/course/getCourseList
 */
courseRoutes.getCourseList = function(req, res) {
    var par = paramAll(req);
    AdminToken.checkAdminLogin(par.token, null, function(err, errCode, adminInfo) {
        par.isAdmin = err ? false : true;
        courseDao.getCourseList(par, function(err, result) {
            if(err) return res.json(new ERR(err, 400));
            res.json(new PKG(result));
        })
    });
}
router.get('/getCourseList', courseRoutes.getCourseList);

/**
 * 添加或编辑主课程
 * @param  course
 * @param  token
 * @param  spec          目前属性: sub_course(子课程)  sex (性别)  crowd (人群)
 * @param  id
 *         url/course/save
 */
courseRoutes.save = function(req, res) {
    var par = paramAll(req);
    var err = checkHasParam(par, ['course']).err;
    if(err) return res.json(new ERR(err, 400));
    par.status = !par.spec ? 0 : 1;
    AdminToken.checkAdminLogin(par.token, null, function(err, errCode, adminInfo) {
        if(err) return  res.json(new ERR(err, errCode));
        courseDao.save(par, function(err, result) {
            if(err) return res.json(new ERR(err, 400));
            res.json(new PKG(result));
        })
    });
}
router.post('/save', courseRoutes.save);

/**
 * 删除主课程
 * @param  id
 * @param  token
 *         url/course/del
 */
courseRoutes.del = function(req, res) {
    var par = paramAll(req);
    var err = checkHasParam(par, ['id']).err;
    if(err) return res.json(new ERR(err, 400));
    AdminToken.checkAdminLogin(par.token, null, function(err, errCode, adminInfo) {
        if(err) return  res.json(new ERR(err, errCode));
        courseDao.del(par, function(err, result) {
            if(err) return res.json(new ERR(err, 400));
            res.json(new PKG(result));
        })
    });
}
router.post('/del', courseRoutes.del);

/**
 * 子课程列表
 * @param  status
 *         url/course/getSubCourse
 */
courseRoutes.getSubCourse = function(req, res) {
    var par = paramAll(req);
    par.size = !par.size ? 10 : parseInt(par.size);
    par.start = !par.page ? 0 : par.start = (parseInt(par.page) - 1) * parseInt(par.size);
    AdminToken.checkAdminLogin(par.token, null, function(err, errCode, adminInfo) {
        if(err) return  res.json(new ERR(err, errCode));
        courseDao.getSubCourseList(par, function(err, result) {
            if(err) return res.json(new ERR(err, 400));
            res.json(new PKG(result));
        })
    });
}
router.post('/getSubCourse', courseRoutes.getSubCourse);

/**
 * 上下架子课程
 * @param  status
 * @param  id
 *         url/course/updateSubStatus
 */
courseRoutes.updateSubStatus = function(req, res) {
    var par = paramAll(req);
    if(par.status != undefined) return res.json(new ERR('status不为空！', 400));
    AdminToken.checkAdminLogin(par.token, null, function(err, errCode, adminInfo) {
        if(err) return  res.json(new ERR(err, errCode));
        courseDao.updateSubStatus(par, function(err, result) {
            if(err) return res.json(new ERR(err, 400));
            res.json(new PKG(result));
        })
    });
}
router.post('/updateSubStatus', courseRoutes.updateSubStatus);

/**
 * 商户录入或者具体课程和价格规格
 * @param  openid
 * @param  id   (有id为编辑)
 * @param  course_id   主课程id
 * @param  sub_course  子课程名
 * @param  crowd       人群
 * @param  sex         性别
 * @param  pics        img1  img2  ..
 * @param  mechanism_id   商户id
 * @param  cost_spec_arr  数组  [{ id (无id为新增), sub_course_id, lvl, target_lvl, class_count, duration, price }]
 * @param  mp_id      位置id
 *         url/course/saveSubCourse
 */
function checkSubCourseParam(par, cb) {
    var picKeys = ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9'];
    if(uploadPicHelper.checkPicName(picKeys, par.picNames)) return cb('图片参数有误', 400);
    var necessaryParamKey = ['course_id', 'sub_course', 'crowd', 'sex', 'mechanism_id', 'mp_id', 'openid'];
    necessaryParamKey.forEach(function(k) {
        if(!par[k]) return cb('缺少必要参数！', 400);
    })
    par.cost_spec_arr = JSON.parse(par.cost_spec_arr);
    if(par.cost_spec_arr.length == 0) return cb('价格规格不为空！', 400);
    var necessarySpecParamKey = ['lvl', 'target_lvl', 'class_count', 'duration', 'price'];
    for(var i=0; i<par.cost_spec_arr.length; i++) {
        var specParam = par.cost_spec_arr[i];
        necessarySpecParamKey.forEach(function(k) {
            if(!specParam[k]) return cb('缺少必要的价格规格参数！', 400);
        })
    }
    cb(null, 0, par);
}
courseRoutes.saveSubCourse = function(req, res) {
    uploadPicHelper.uploadPicsAndCheckPar(req, checkSubCourseParam, 9, 'course', false, function(err, errCode, par) {
        if(err) return res.json(new ERR(err, errCode));
        par.pics = [];
        if(par.img1) par.pics.push(par.img1);
        if(par.img2) par.pics.push(par.img2);
        if(par.img3) par.pics.push(par.img3);
        if(par.img4) par.pics.push(par.img4);
        if(par.img5) par.pics.push(par.img5);
        if(par.img6) par.pics.push(par.img6);
        if(par.img7) par.pics.push(par.img7);
        if(par.img8) par.pics.push(par.img8);
        if(par.img9) par.pics.push(par.img9);
        par.pics = JSON.stringify(par.pics);
        mechanismDao.checkId(par, function(err, result) {
            if(err) return res.json(new ERR(err));
            courseDao.saveSubCourse(par, function(e, d) {
                if(e) {
                    if(e.status == 401) return res.json(new ERR(e.err, e.status));
                    return res.json(new ERR(e, 400));
                }
                res.json(new PKG('添加课程成功！'));
            })
        })
    });
}
router.post('/saveSubCourse', courseRoutes.saveSubCourse);

/**
 * 删除某个课程的价格规格
 * @param  openid
 * @param  id     (价格规格id)
 * @param  sub_course_id   (具体课程的id 不是主课程的id)
 *         url/course/delCostSpec
 */
courseRoutes.delCostSpec = function(req, res) {
    var par = paramAll(req);
    if(!par.openid) return res.json(new ERR('openid不为空！', 400));
    if(!par.id) return res.json(new ERR('id不为空！', 400));
    if(!par.sub_course_id) return res.json(new ERR('sub_course_id不为空！', 400));
    courseDao.delCostSpec(par, function(e, d) {
        if(e) return res.json(new ERR(e, 400));
        res.json(new PKG(d));
    })
}
router.post('/delCostSpec', courseRoutes.delCostSpec);

/**
 * 我的课程的管理
 * @param  openid
 * @param  mechanism_id
 *         url/course/manage
 */
courseRoutes.manage = function(req, res) {
    var par = paramAll(req);
    if(!par.openid) return res.json(new ERR('openid不为空！', 400));
    if(!par.mechanism_id) return res.json(new ERR('mechanism_id不为空！', 400));
    courseDao.manage(par, function(e, d) {
        if(e) return res.json(new ERR(e, 400));
        res.json(new PKG(d));
    })
}
router.post('/manage', courseRoutes.manage);

/**
 *  哪个课程下的具体子课程
 * @param  openid
 * @param  mechanism_id
 * @param  cid
 *         url/course/getSubCourseById
 */
courseRoutes.getSubCourseById = function(req, res) {
    var par = paramAll(req);
    if(!par.cid) return res.json(new ERR('cid不为空！', 400));
    if(!par.openid) return res.json(new ERR('openid不为空！', 400));
    if(!par.mechanism_id) return res.json(new ERR('mechanism_id不为空！', 400));
    courseDao.getSubCourseById(par, function(e, d) {
        if(e) return res.json(new ERR(e, 400));
        res.json(new PKG(d));
    })
}
router.post('/getSubCourseById', courseRoutes.getSubCourseById);


module.exports = router;